/**
 *  @file doxygen.h
 *
 *  @date 25-dec-2009
 *  @author Ives van der Flaas
 */

#ifndef DOXYGEN_H_
#define DOXYGEN_H_

/**
 * \mainpage Earth Protector
 * aka MoCoSIE (Most Complicated Space Invaders Ever)
 *
 * \section intro_sec Introductie
 *
 * Earth Protector is een Space Invaders cloon met meerdere schepen, meerdere typen kogels,
 * achtergronden, levels, highscores, geluid en veel meer. Earth Protector is gebaseerd op SDL.
 *
 * \section dep_sec Dependencies
 * 	- SDL,
 * 	- SDL_image,
 * 	- SDL_ttf,
 * 	- libpng,
 * 	- SDL_gfx,
 * 	- doxygen,
 * 	- SDL_mixer,
 * 	- make,
 * 	- g++ 4.3 or higher (std::tr1 support)
 *
 *
 * \section interessant Interessante & Speciale aspecten
<ul>
	<li>
		Typesetting engine (gebruik makende van SDL_ttf) met ondersteuning voor
		meerdere regels (newline separated), links, center & rechts uitlijnen,
		keuze tussen snel rendering met een opake achtergrond of iets trager met
		een transparante ondergrond (niet triviaal in SDL wegens niet
		functionerende RGBA->RGBA blitting functionaliteit).
	</li>
	<li>
		Resource manager voor afbeeldingen, muziek & fonts. Deze worden maar 1x
		van schijf ingeladen. De 2e keer dat hetzelfde object wordt opgevraagd
		zal dit worden gekopieerd uit de cache.
	</li>
	<li>
		Audio manager met ondersteuning voor muziek & geluidsfragmenten. Wrapper
		rond SDL_mixer. Muziek starten & stoppen is 1 functieaanroep,
		geluidseffecten afspelen idem dito (audio files worden door de resource
		manager gecached).
	</li>
	<li>
		Het spelvenster is live resizable. Indien nodig wordt het venster
		geletterboxed of gepillarboxed (wanneer de verhouding niet meer 4:3 is).
		Alle game objecten worden geschaald vanaf hun origineel, niet hun laatste
		voorstelling.
	</li>
	<li>
		Alle achtergronden, afbeeldingen en geluidseffecten (...) zijn zelfgemaakt.
	</li>
	<li>
		De scrollende tekst aan het begin van het spel wordt op runtime
		ingelezen uit een tekstbestand, namelijk config/introtext.txt.
	</li>
	<li>
		7 manueel gescripte levels. Wanneer er hoeveel & welke vijanden
		op het scherm moeten komen in welke level, welk type van vijanden
		dit zijn, de titel van de level, ... wordt op runtime uitgelezen
		uit config/levels.xml (gebruik makende van TinyXML).
	</li>
	<li>
		Highscoresysteem dat gebruik maakt van het MVC-pattern en zijn
		data wegschrijft in XML formaat (opnieuw met TinyXML). Score
		wordt berekend aan de hand van aantal geraakte schepen met een
		penalty voor afgeschoten kogels.
	</li>
	<li>
		Verschillende soorten schepen: cruisers, fighters, sweepers,
		moederschepen,... met verschillend uiterlijk, verschillende
		vuurfrequenties, verschillende controllers, verschillende
		snelheden, ...
	</li>
	<li>
		Verschillende soorten schepen (fighter, cruiser, sprayer, sweeper,
		mothership, ...) en hun eigenschappen worden dynamisch
		uitgelezen uit config/ships.xml. Het is dus mogelijk om nieuwe schepen
		toe te voegen zonder te hercompileren.
	</li>
	<li>
		Instellingen zoals wel of geen geluid worden opgeslagen bij
		afsluiten en ingeladen op moment van starten (xml-based...).
	</li>
	<li>
		Volledig SDL-based GUI systeem met knoppen, inputfields, ...
	</li>
	<li>
		Prefetching systeem voor mijn resource manager. Alle media (images,
		fonts, audio chunks, muziek) die wordt ingeladen wordt in een XML
		formaat weggeschreven. De volgende keer dat EarthProtector start
		zal in dit XML bestand gekeken worden en alle bestanden die naar
		alle waarschijnlijkheid nodig gaan zijn tijdens deze uitvoering
		van het programma reeds in het geheugen geladen worden tijdens
		het splash screen. Dit gaat vertragingen van het spel tegen.
	</li>
	<li>
		Een live scoreteller rechts boven het scherm.
	</li>
</ul>
 * etc...
 *
 * \section Enkele Statistieken
 * - > 9000 regels code en
 * - > 3000 regels commentaar.
 */

#endif /* DOXYGEN_H_ */
